/**
 <p>文件树维护控件，支持右键选择树维护操作</p>
 * xtype = cceaftreepanel

 * @module Ext-ux-cceaf-control
 * @class cceaf.control.FileTreePanel
 * @extends Ext.tree.Panel
 * @since 1.0
 */
Ext.define('cceaf.control.FileTreePanel',{
	extend: 'Ext.tree.Panel', 
    alias: 'widget.cceaffiletreepanel',

	constructor: function(config){
		config = config || {};
		
		cceaf.control.FileTreePanel.superclass.constructor.apply(this, arguments);
	},
	
	/**
	 * 每次显示billform时，是否都重新创建
	 *
     * @property newFormCreate 
     * @type boolean
     * @default false
     */
	newFormCreate: false,
	
	/**
	 * 编辑表单
	 *
     * @property billForm 
     * @type Ext.form.Panel
     * @default null
     */
	billForm: null,
	
	
	/**
	 * 页面状态,add-新增页面  edit-修改页面 delete-删除页面 view-查看页面
	 *
     * @property pageStatus 
     * @type String
     * @default null
     */
	pageStatus: null,
	
	/**
	 * 在编辑form中的父节点ID的name
	 *
     * @property parentid 
     * @type String
     * @default "parentId"
     */
	parentId: "parentId",
	
	/**
	 * 在编辑form中的父节点名称的name
	 *
     * @property parentName 
     * @type String
     * @default "parentName"
     */
	parentName: "parentName",
	
	/**
	 * 在编辑form中的节点名称的name
	 *
     * @property nodeName 
     * @type String
     * @default "nodeName"
     */
	nodeName: "nodeName",
	
	/**
	 * 模块名称，在grid的title上显示
	 *
     * @property moduleName 
     * @type String
     * @default ""
     */
	moduleName: "",
	
	/**
	 * 右键菜单
	 *
     * @property contextMenu 
     * @type Ext.menu.Menu
     * @default null
     */
	contextMenu: null,
	
	/**
	 * 树的modelKey，如果cceaf.model.main.TreeNodeModel则为id
	 *
     * @property modelKey 
     * @type String
     * @default "id"
     */
	modelKey: "id",
	
	/**
	 * 树的model
	 *
     * @property model 
     * @type String
     * @default "cceaf.model.main.TreeNodeModel"
     */
	model: "cceaf.model.main.TreeNodeModel",
	
	
	/**
	 * 根节点名称
	 *
     * @property rootName 
     * @type String
     * @default "根节点"
     */
	rootName: "根节点",
	
	/**
	 * 获取树的action
	 *
     * @property treeAction 
     * @type String
     * @default null
     */
	treeAction: null,
	
	/**
	 * 增加的action
	 *
     * @property addAction 
     * @type String
     * @default null
     */
	addAction: null,
	
	/**
	 * 编辑的action
	 *
     * @property editAction 
     * @type String
     * @default null
     */
	editAction: null,
	
	/**
	 * 获取对象的action，一般为action中的findByKey
	 *
     * @property findByKeyAction 
     * @type String
     * @default null
     */
	findByKeyAction: null,
	
	/**
	 * 查看的action，一般为action中的findByKey
	 *
     * @property viewAction 
     * @type String
     * @default null
     */
	viewAction: null,
	
	/**
	 * 删除的action
	 *
     * @property deleteAction 
     * @type String
     * @default null
     */
	deleteAction: null,
	
	/**
	 * 重命名的action
	 *
     * @property renameAction 
     * @type String
     * @default null
     */
	renameAction: null,
	
	/**
	 * 下载文件的action
	 *
     * @property downloadAction 
     * @type String
     * @default null
     */
	downloadAction: null,
	
	/**
	 * 上传文件的action
	 *
     * @property uploadAction
     * @type String
     * @default null
     */
	uploadAction: null,
	
	/**
	 * 打印查询列表的action
	 *
     * @property printListAction 
     * @type String
     * @default null
     */
	printListAction: null,
	
	/**
	 * 打印表单的action
	 *
     * @property printBillAction 
     * @type String
     * @default null
     */
	printBillAction: null,
	
	/**
	 * 把查询列表导出成excel的action
	 *
     * @property exportExcelAction 
     * @type String
     * @default null
     */
	exportExcelAction: null,
	
	/**
	 * 主键名称集合，以,分开
	 *
     * @property masterKeyIds 
     * @type String
     * @default null
     */
	masterKeyIds: null,
	
	
	/**
	 * 显示区的itemId
	 *
     * @property viewAreaItemId 
     * @type String
     * @default "viewArea"
     */
	viewAreaItemId: "viewArea",
	
	
	/**
	 * 弹出窗口大小，默认如下：
	 * <br> popWindow: {
	 * <br> 	width: 600,
	 * <br> 	heigth: 450
	 * <br> }
	 *
     * @property popWindow 
     * @type attribute
     * @default null
     */
	popWindow: {
		width: 600,
		heigth: 450
	},
	
	initComponent : function(){
		var config = this;
		
		var model = config.model;
		if (!model) {
			cceaf.util.ExtHelper.showErrorDialog("请设置树的model！");
			return;
		}
		if(!Ext.ModelManager.getModel(model)) {
    		alert(config.getXType() + "的" + model + '不存在！');
    		return;
    	}
		
		//定义数据源
		var ds = new Ext.data.TreeStore({
	    	model: model,
	    	autoLoad: true,
	        proxy: {
	            type: 'ajax',
	            url:  config.treeAction
	        },
	        sorters: [{
	            property: 'leaf',
	            direction: 'ASC'
	        }, {
	            property: 'text',
	            direction: 'ASC'
	        }],
	        
	        listeners: {
	        	'load': function(){
	        		var jr = ds.getProxy().getReader();
	        		if(!jr.jsonData) {
	        			cceaf.util.ExtHelper.showErrorDialog("没有设置正确的action或没有返回正确的json字符串！");
	        			return;
	        		}
	        		
	        		var message = jr.jsonData.message;
	        		var url = jr.jsonData.url;
	        		cceaf.util.ExtHelper.showInfoDialog(message,url);
	        	},
	        	'loadexception': function(){
	        		var jr = ds.getProxy().getReader();
	        		if(jr.jsonData){
		        		var message = jr.jsonData.message;
		        		var url = jr.jsonData.url;
		        		cceaf.util.ExtHelper.showErrorDialog(message,url);
	        		}
	        		else{
	        			cceaf.util.ExtHelper.showErrorDialog("返回无效的JSONDATA数据");
	        		}
	        	}
	        }
	    });
	    
		Ext.applyIf(this, {
	        store: ds,
	        rootVisible: true,
	        frame: true,
	        autoScroll:true,
			animate:true,
			enableDD:true,
			containerScroll: true,
	        height: config.height,
	        anchor: '100%'
		});
		
		cceaf.control.FileTreePanel.superclass.initComponent.call(this);
    },
    
    /**
     * 创建bill form，对需要维护的页面必需重载此方法
     */
    createForm: function(){
    	if(this.billForm == null){
    		cceaf.util.ExtHelper.showErrorDialog('请重载fileTreePanel的createForm方法创建维护表单！');
    	}
    }
    
    
});